package lamda;

public class TestLamda01 {

    // 3.静态内部类
    static class LikeOut implements ILike{
        @Override
        public void lamda() {
            System.out.println("I like lamda outer class.");
        }
    }

    public static void main(String[] args) {

        ILike like = new Like();
        //ILike Ilike1 = new ILike(); 接口不能被实例化
        Like test=new Like();
        // 两种方法主要区别在于编译时类型检查
        // Ilike：编译器只会检查ILike接口的方法。这意味着你只能调用ILike接口中定义的方法
        // Like：会检查Like类中的所有方法。表明你可以调用Like类中定义的所有方法，不仅是ILike接口中定义的方法
        like.lamda();
        test.lamda();
        // 正确声明变量并初始化
        ILike likeout = new LikeOut();
        likeout.lamda();
        // 4.局部内部类
        class LikeIn implements ILike{
            @Override
            public void lamda() {
                System.out.println("I like lamda inner class.");
            }
        }
        ILike likein=new LikeIn();
        likein.lamda();
        // 5.匿名内部类
        ILike likeA=new ILike() {
            @Override
            public void lamda() {
                System.out.println("I like lamda anonymous class.");
            }
        };
        likeA.lamda();

        // 6.Lamda简化
        ILike likeL = () -> {
            System.out.println("I like lamda  class.");
        };
        likeL.lamda();
    }
}
// 1.定义函数式接口
interface ILike{
    void lamda();
}
// 2.实现类
class Like implements ILike{
    @Override
    public void lamda() {
        System.out.println("I like lamda.");
    }
}
